package common;

import java.util.Date;
import java.util.Map;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

import entity.Pessoa;
import entity.PessoaFisica;

@SuppressWarnings("serial")
public class Suporte extends ActionSupport implements SessionAware, Preparable, ServletContextAware {

	private Pessoa usuarioNaSessao;

	@Override
	public void setServletContext(ServletContext arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void prepare() throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setSession(Map<String, Object> arg0) {
		// TODO Auto-generated method stub
		
	}
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void criaSessao(Pessoa usuario) {
		Map session = ActionContext.getContext().getSession();
		session.put("logado", "true");
		session.put("usuarioLogado", usuario);
		session.put("context", new Date());
	}

	@SuppressWarnings("rawtypes")
	public void removeSessao() {
		Map session = ActionContext.getContext().getSession();
		session.remove("logado");
		session.remove("context");
	}
	
	@SuppressWarnings("rawtypes")
	public Pessoa retornaUsuarioDaSessao() {
		Map session = ActionContext.getContext().getSession();
		
		if(session.get("logado") == "true") {
			return (Pessoa) session.get("usuarioLogado");
		} else {
			return null;
		}
	}
	
	@SuppressWarnings("rawtypes")
	public boolean isUsuarioLogado() {
		Map session = ActionContext.getContext().getSession();
		
		if(session.get("logado") == "true") {
			this.usuarioNaSessao = retornaUsuarioDaSessao();
			return true;
		} else {
			return false;
		}
	}
	
	@SuppressWarnings("rawtypes")
	public boolean isUsuarioComum() {
		Map session = ActionContext.getContext().getSession();
		
		if(session.get("logado") == "true") {
			this.usuarioNaSessao = retornaUsuarioDaSessao();
			
			DelegaServicos delega = new DelegaServicos();
			Pessoa pessoa = new Pessoa();
			
			pessoa = delega.getPessoaController().retornaPessoa(this.usuarioNaSessao.getLoginPessoa());
			
			if(pessoa instanceof PessoaFisica) {
				
				if(((PessoaFisica) pessoa).getCreci() == null) {
					return true;
				} else {
					
					return false;
					
				}
				
			} else {
				
				return false;
				
			}

		} else {
			return false;
		}
	}
	
	public boolean isPostMethod() {
		String method = ServletActionContext.getRequest().getMethod();
		return (method != null && method.equalsIgnoreCase("POST"));
	}
	
	public boolean isGetMethod() {
		String method = ServletActionContext.getRequest().getMethod();
		return (method != null && method.equalsIgnoreCase("GET"));
	}
	
	public Pessoa getUsuarioNaSessao() {
		return usuarioNaSessao;
	}

	public void setUsuarioNaSessao(Pessoa usuarioNaSessao) {
		this.usuarioNaSessao = usuarioNaSessao;
	}
}
